package cn.doitedu.javase.thread;

import java.util.ArrayList;
import java.util.List;

/**
 * @Author: 深似海
 * @Site: <a href="www.51doit.com">多易教育</a>
 * @QQ: 657270652
 * @Date: 2024/2/2
 * @Desc: 学大数据，上多易教育
 * <p>
 * 实现一个线程池：一个池子中有若干个线程
 * 然后用户可以向线程池中提交 Runnable任务
 * 线程池收到用户提交的任务后，就从池中挑选一个线程来执行用户提交的runnable任务
 **/
public class _04_线程开发练习2 {

    public static void main(String[] args) {

        ThreadPool threadPool = new ThreadPool(5);

        threadPool.submitTask(new UserTask1());
        threadPool.submitTask(new UserTask2());


    }

}

class UserTask1 implements Runnable {
    @Override
    public void run() {
        System.out.println("task1工作中:" + 1000);
        try {
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            throw new RuntimeException(e);
        }
        System.out.println("task1工作中:" + 1000);
    }
}

class UserTask2 implements Runnable {
    @Override
    public void run() {
        System.out.println("task2工作中:" + 2000);
        try {
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            throw new RuntimeException(e);
        }
        System.out.println("task2工作中:" + 2000);
        try {
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            throw new RuntimeException(e);
        }
        System.out.println("task2工作中:" + 2000);
    }
}


/**
 * @Author: 深似海
 * @Site: <a href="www.51doit.com">多易教育</a>
 * @QQ: 657270652
 * @Date: 2024/2/2
 * @Desc: 学大数据，上多易教育
 * 线程池： 框架，中间件
 **/
class ThreadPool {

    // 为用户提供的构造线程池的方法
    // 参数size，表示池中应该初始化几个线程
    List<Thread> threadList = new ArrayList<>();
    int i = 0;

    public ThreadPool(int size) {

        for (int i = 0; i < size; i++) {
            Thread thread = new Thread();
            threadList.add(thread);
        }

    }


    // 为用户提供的提交任务用的方法
    public void submitTask(Runnable task) {
        // 负责挑选一个线程，将这个进来的task跑起来
        Thread thread = threadList.get(i);

        // 给i++
        i++;

        // 用这个挑出来的线程，去执行用户传入的task
        thread.start();




    }

}

